﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Hiro.Interfaces;

namespace Hiro.ActivationPoints.Interfaces
{
    /// <summary>
    /// Represents an activation point that is used when instantiating a particular service type.
    /// </summary>
    public interface ITypeActivationPoint : IActivationPoint
    {
        /// <summary>
        /// Gets a value indicating the target type that will be instantiated if
        /// this activation point is activated.
        /// </summary>
        /// <value>The target type itself.</value>
        Type TargetType { get; }

        /// <summary>
        /// Gets the value indicating the list of <see cref="IConstructorActivationPoint"/> objects
        /// that will be used to instantiate the service type.
        /// </summary>
        /// <value>A list containing the list of available constructor activation points.</value>
        IList<IConstructorActivationPoint> ConstructorActivationPoints { get; }

        /// <summary>
        /// Gets the value indicating the list of <see cref="IPropertyActivationPoint"/> objects
        /// that will be used to perform property injection operations on the newly-instantiated service type.
        /// </summary>
        IList<IPropertyActivationPoint> PropertyActivationPoints { get; }
    }
}
